package com.baseframe.tool.json.module;

import com.baseframe.tool.json.serializer.BaseBigNumberSerializer;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;

import java.math.BigDecimal;
import java.math.BigInteger;

public class BaseNumberModule extends SimpleModule {

    public static final BaseNumberModule INSTANCE = new BaseNumberModule();


    public BaseNumberModule() {
        super(BaseNumberModule.class.getName());
        // Long 和 BigInteger 采用定制的逻辑序列化，避免超过js的精度
        this.addSerializer(Long.class, BaseBigNumberSerializer.instance);
        this.addSerializer(Long.TYPE, BaseBigNumberSerializer.instance);
        this.addSerializer(BigInteger.class, BaseBigNumberSerializer.instance);
        // BigDecimal 采用 toString 避免精度丢失，前端采用 decimal.js 来计算。
        this.addSerializer(BigDecimal.class, ToStringSerializer.instance);
    }
}
